﻿using JncInterProcess;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using HysVision;
namespace VisionBaseLib
{
    public class HYVision 
    {
        HysVisionClassTCP m_process = null;
        public delegate void ShowVisionImagedelegate(Bitmap 原始图像, Bitmap 图形图像,string 相机名称, string 流程名称);
        public  ShowVisionImagedelegate _ShowVisionImagedelegate=null;
        public delegate void GetVisionResult(List<string> 数据, string 相机名称, string 流程名称);
        public GetVisionResult _GetVisionResultdelegate = null;
        public delegate void SnapImageEndHander(string 相机名称, string 流程名称);
        public SnapImageEndHander _VisionSnapOK = null;
        public HYVision()
        {
        }
        public void Init()
        {
            //初始化
            m_process = new HysVisionClassTCP(@"D:\主程序\MainFrameWork.exe");
            m_process.图像回调委托对象 += onSrcImageGrabbed;
            m_process.数据回调委托对象 += onGetReciveData;
            m_process.流程列表回调委托对象 += M_process_流程列表回调委托对象;
            m_process.图像通知委托对象 += M_process_图像通知委托对象;
        }

        private void M_process_图像通知委托对象(string 相机名称, string 流程名称)
        {
            if (_VisionSnapOK != null)
                _VisionSnapOK(相机名称, 流程名称);
        }

        private void M_process_流程列表回调委托对象(List<string> 流程数据)
        {
            
        }


        //实时图像回调
        void onSrcImageGrabbed(Bitmap 原始图像, Bitmap 图形图像,string 相机名称, string 流程名称)
        {
            if (_ShowVisionImagedelegate != null)
            {
                try
                {
                    Bitmap bt_Old = new Bitmap(原始图像);
                    Bitmap bt_NEW = new Bitmap(图形图像);
                    _ShowVisionImagedelegate(bt_Old, bt_NEW, 相机名称,流程名称);
                }
                catch (AccessViolationException ex)
                {

                }
            }

        }
        void onGetReciveData( List<string> 数据, string 相机名称, string 流程名称)
        {
            if (_GetVisionResultdelegate != null)
            {
                _GetVisionResultdelegate(数据, 相机名称, 流程名称);
            }

        }
        public  void ExitVision()
        {
            m_process.退出视觉();
            m_process.卸载资源();
        }
        public void Excute(string strProcess)
        {
            m_process.执行流程(strProcess);
        }
        public  void ShowVisionWindow()
        {
            m_process.最大化();
        }

        public  void HideVisionWindow()
        {
            m_process.最小化();
        }


        public  bool SwitchProgram(string name)
        {

            m_process.切换机种(name);
            return true;
        }

    }
}
